Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Program database</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Program_database"> <link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Program_database rootpage-Program_database skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Program database</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with the <a href="Protein_Data_Bank_(file_format)" title="Protein Data Bank (file format)">Protein Data Bank</a> file format</div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox"><tbody><tr><th colspan="2" class="infobox-above" style="padding-bottom: 0.15em;">Program database</th></tr><tr><th scope="row" class="infobox-label" style="line-height: 1.2; padding-right: 0.65em;"><a href="Filename_extension" title="Filename extension">Filename extension</a></th><td class="infobox-data" style="line-height: 1.35;"><style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */


.mw-parser-output .monospaced{font-family:monospace,monospace}


/* end https://en.wikipedia.org/ */
</style><div class="monospaced">
.pdb</div></td></tr><tr><th scope="row" class="infobox-label" style="line-height: 1.2; padding-right: 0.65em;"><a href="Media_type" title="Media type">Internet media&nbsp;type</a></th><td class="infobox-data" style="line-height: 1.35;">application/x-ms-pdb</td></tr><tr><th scope="row" class="infobox-label" style="line-height: 1.2; padding-right: 0.65em;">Developed&nbsp;by</th><td class="infobox-data" style="line-height: 1.35;"><a href="Microsoft" title="Microsoft">Microsoft</a></td></tr><tr><th scope="row" class="infobox-label" style="line-height: 1.2; padding-right: 0.65em;">Type of format</th><td class="infobox-data" style="line-height: 1.35;"><a href="Debug" class="mw-redirect" title="Debug">Debug</a></td></tr></tbody></table>
<p><b>Program database</b> (<b>PDB</b>) is a file format (developed by <a href="Microsoft" title="Microsoft">Microsoft</a>) for storing debugging information about a program (or, commonly, program modules such as a <a href="Dynamic-link_library" title="Dynamic-link library">DLL</a> or <a href="EXE" class="mw-redirect" title="EXE">EXE</a>). PDB files commonly have a .pdb <a href="Filename_extension" title="Filename extension">extension</a>. A PDB file is typically created from source files during compilation. It stores a list of all <a href="Symbol_(computing)" class="mw-redirect" title="Symbol (computing)">symbols</a> in a module with their addresses and possibly the name of the file and the line on which the symbol was declared. This symbol information is not stored in the module itself, because it takes up a lot of space.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2></div>
<p>When a program is debugged, the debugger loads debugging information from the PDB file and uses it to locate symbols or relate current execution state of a program source code. <a href="Microsoft_Visual_Studio" class="mw-redirect" title="Microsoft Visual Studio">Microsoft Visual Studio</a> uses PDB files as its primary file format for debugging information.
</p><p>Another use of PDB files is in services that collect crash data from users and relate it to the specific parts of the source code that cause (or are involved in) the crash.
</p><p>Microsoft compilers will, under appropriate options, store information in a single PDB about types found in the compiled sources. Debug information specific to each source is stored in the compiled object file, and contains references to types in the PDB. Each compilation will add to the PDB any types that are not already found there, so that references in already compiled object files remain valid.
</p><p>The Microsoft linker, under appropriate options, builds a complete new PDB which combines the debug information found in its input modules, the types referenced by those modules, and other information generated by the linker. If the link is performed incrementally, an existing PDB is modified by adding or replacing only the information pertaining to added or replaced modules, and adding any new types not already in the PDB.
</p><p>PDB files are usually removed from the programs' distribution package. They are used by developers during debugging to save time and gain insight.
</p>
<div class="mw-heading mw-heading2"><h2 id="Extracting_information">Extracting information</h2></div>
<p>The PDB format is documented <a rel="nofollow" class="external text" href="https://github.com/Microsoft/microsoft-pdb">here</a>, information can be extracted from a PDB file using the DIA (Debug Interface Access) interfaces, available on <a href="Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>. There are also third-party tools that can also extract information from PDB such as <a href="Radare2" title="Radare2">radare2</a> and <a rel="nofollow" class="external text" href="https://github.com/moyix/pdbparse">pdbparse</a>
</p>
<div class="mw-heading mw-heading2"><h2 id="Multiple_stream_format">Multiple stream format</h2></div>
<p>The PDB is a single file which is logically composed of several sub-files, called <b>streams</b>. It is designed to optimize the process of making changes to the PDB, as performed by compiles and incremental links. Streams can be removed, added, or replaced without rewriting any other streams, and the changes to the metadata which describes the streams is minimized as well.
</p><p>The PDB is organized in fixed-size <b>pages</b>, typically 1K, 2K, or 4K, numbered consecutively starting at 0.
</p><p><small><i>Note</i>: It is presumed that all numeric information (<i>e.g.,</i> stream and page numbers) is stored in little-endian form, the native form for Intel x86 based processors. The pdbparse Python code makes this assumption.</small>
</p>
<div class="mw-heading mw-heading3"><h3 id="Stream">Stream</h3></div>
<p>Each stream in the PDB occupies several pages, which aren't necessarily consecutively numbered. The stream has a number and a length. The stream content is the concatenation of its pages, truncated to the stream's length.
</p>
<div class="mw-heading mw-heading3"><h3 id="Metadata_format">Metadata format</h3></div>
<p>The function of the PDB metadata is to identify all of the component streams, giving the length, and sequence of pages for each stream. Streams are numbered consecutively starting with 0. There is also a root stream, unnumbered, which contains some of the metadata.
</p>
<div class="mw-heading mw-heading4"><h4 id="Header">Header</h4></div>
<p>The PDB begins with a header, consisting of:
</p>
<ul><li>Signature, used to identify and validate the specific format. The length of the signature varies with the specific format.</li>
<li>The remainder of the header varies with the format identified by the signature.</li></ul>
<p>The header may be longer than a single page.
</p><p>Microsoft tools use two PDB formats:
</p>
<div class="mw-heading mw-heading5"><h5 id="Version_2">Version 2</h5></div>
<p>Signature is <code>"Microsoft C/C++ program database 2.00\r\n\032JG\0\0"</code>(44 bytes).
</p><p>Remainder of the header consists of:
</p>
<ul><li>Page size, 4 bytes.</li>
<li>Start page, 2 bytes.</li>
<li>Number of file pages, 2 bytes.</li>
<li>Root stream size, 4 bytes.</li>
<li>reserved, 4 bytes.</li>
<li>Root stream page number list, 2 bytes per page, enough to cover the above Root stream size.</li></ul>
<div class="mw-heading mw-heading4"><h4 id="Version_7">Version 7</h4></div>
<p>Signature is <code>"Microsoft C/C++ MSF 7.00\r\n\x1ADS\0\0\0"</code>(32 bytes).
</p><p>Remainder of the header consists of:
</p>
<ul><li>Page size, 4 bytes.</li>
<li>Allocation table pointer, 4 bytes. The meaning of this is unknown. There appears to be an allocation table, an array of 65,536 bits (8,192 bytes), located at the end of the PDB, and a 1-bit means a page that is not being used.</li>
<li>Number of file pages, 4 bytes.</li>
<li>Root stream size, 4 bytes.</li>
<li>reserved, 4 bytes.</li>
<li>Page number of the Root stream page number list. It does not indicate the location of the Root stream itself, only of the page containing the structure which points to its pages. At that page, the Root stream page number list indicates the pages where the Root stream is stored. It contains 4 bytes per page, enough to cover the above Root stream size.</li></ul>
<div class="mw-heading mw-heading4"><h4 id="Root_stream">Root stream</h4></div>
<p>The root stream describes all of the PDB streams starting with stream 0. Its contents vary with the PDB format version.
</p>
<div class="mw-heading mw-heading5"><h5 id="Version_2_2">Version 2</h5></div>
<p>The root stream consists of:
</p>
<ul><li>Number of streams, 2 bytes.</li>
<li>Reserved, 2 bytes.</li>
<li>For each stream:
<ul><li>Stream size, 4 bytes.</li>
<li>Reserved, 4 bytes.</li></ul></li>
<li>For each stream:
<ul><li>Stream page number list, 2 bytes per page, enough to cover above stream size.</li></ul></li></ul>
<div class="mw-heading mw-heading5"><h5 id="Version_7_2">Version 7</h5></div>
<p>The root stream consists of:
</p>
<ul><li>Number of streams, 4 bytes.</li>
<li>For each stream:
<ul><li>Stream size, 4 bytes.</li></ul></li>
<li>For each stream:
<ul><li>Stream page number list, 4 bytes per page, enough to cover above stream size.</li></ul></li></ul>
<div class="mw-heading mw-heading4"><h4 id="Stream_contents">Stream contents</h4></div>
<p>Microsoft tools store different sorts of information in different numbered streams. Some stream numbers have a fixed information type associated with them, and other streams are identified in the aforementioned fixed type streams.
</p><p><b>Stream 1</b> is used to verify that the PDB is the same file referred to in an executable or object file stream.
</p>
<ul><li>Version, 4 bytes.</li>
<li>Time date stamp, 4 bytes.</li>
<li>Age, 4 bytes. This is the number of times this PDB has been modified since its creation.</li>
<li>GUID, 16 bytes.</li>
<li>Total length of following names, 4 bytes. Followed by null-terminated character strings.</li></ul>
<p><b>Stream 2</b> and <b>stream 4</b> hold types information. Actual type records define types used in the program. The structure of these records can be found in the file cvinfo.h provided by Microsoft. There are two flavors of records, each with its own set of index numbers: type IDs and types; only types are stored in stream 2 and only type IDs are stored in stream 4. The indices are used to refer to these records from within symbol records and other type records.
</p>
<ul><li>A header:
<ul><li>Version, 4 bytes.</li>
<li>Header size, 4 bytes.</li>
<li>Minimum and maximum (last + 1) index for type records (4 bytes each).</li>
<li>Size of following data, 4 bytes, to the end of the stream.</li></ul></li>
<li>Hash information:
<ul><li>Stream number, 2 bytes with 2 bytes padding.</li>
<li>Hash key, 4 bytes.</li>
<li>Buckets, 4 bytes.</li>
<li>HashVals, TiOff, and HashAdj, each composed of an offset and length, each 4 bytes.</li></ul></li>
<li>Type records, variable length, count = (maximum - minimum) from above header.</li></ul>
<p><b>Stream 3</b> is a directory for other streams. Note, it is not present in Version 2, nor in a PDB produced by a compiler. The stream starts with a header which is padded to be 64 bytes in total
</p>
<table class="wikitable">
<caption>PDB Stream 3 Header (struct NewDBIHdr)<a rel="nofollow" class="external autonumber" href="https://github.com/Microsoft/microsoft-pdb/blob/master/PDB/dbi/dbi.h">[1]</a>
</caption>
<tbody><tr>
<th>Offset
</th>
<th>Size
</th>
<th>Name
</th>
<th>Description
</th></tr>
<tr>
<td>0
</td>
<td>4
</td>
<td>Signature
</td>
<td>Header identifier, == 0xFFFFFFFF
</td></tr>
<tr>
<td>4
</td>
<td>4
</td>
<td>HeaderVersion
</td>
<td>Version of the Header
</td></tr>
<tr>
<td>8
</td>
<td>4
</td>
<td>Age
</td>
<td>
</td></tr>
<tr>
<td>12
</td>
<td>2
</td>
<td>snGSSyms
</td>
<td>
</td></tr>
<tr>
<td>14
</td>
<td>2
</td>
<td>usVerAll
</td>
<td><div class="mw-highlight mw-highlight-lang-c mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerPdbDllMin</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span><span class="w"> </span><span class="c1">// minor version and</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerPdbDllMaj</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span><span class="w"> </span><span class="c1">// major version and</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">fNewVerFmt</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// flag telling us we have rbld stored elsewhere (high bit of original major version)</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">vernew</span><span class="p">;</span><span class="w"> </span><span class="c1">// that built this pdb last.</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerPdbDllRbld</span><span class="o">:</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerPdbDllMin</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerPdbDllMaj</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">verold</span><span class="p">;</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">usVerAll</span><span class="p">;</span>
<span class="w"> </span><span class="p">};</span>
</pre></div>
</td></tr>
<tr>
<td>16
</td>
<td>2
</td>
<td>snPSSyms
</td>
<td>
</td></tr>
<tr>
<td>18
</td>
<td>2
</td>
<td>usVerPdbDllBuild
</td>
<td>build version of the pdb dll that built this pdb last
</td></tr>
<tr>
<td>20
</td>
<td>2
</td>
<td>snSymRecs
</td>
<td>
</td></tr>
<tr>
<td>22
</td>
<td>2
</td>
<td>VerPdbDllRBld
</td>
<td>rbld version of the pdb dll that built this pdb last
</td></tr>
<tr>
<td>24
</td>
<td>4
</td>
<td>cbGpModi
</td>
<td>size of rgmodi substream
</td></tr>
<tr>
<td>28
</td>
<td>4
</td>
<td>cbSC
</td>
<td>size of Section Contribution substream
</td></tr>
<tr>
<td>32
</td>
<td>4
</td>
<td>cbSecMap
</td>
<td>size of section map
</td></tr>
<tr>
<td>36
</td>
<td>4
</td>
<td>cbFileInfo
</td>
<td>size of file info stream
</td></tr>
<tr>
<td>40
</td>
<td>4
</td>
<td>cbTSMap
</td>
<td>size of the Type Server Map substream
</td></tr>
<tr>
<td>44
</td>
<td>4
</td>
<td>iMFC
</td>
<td>MFC Index
</td></tr>
<tr>
<td>48
</td>
<td>4
</td>
<td>cbDbgHdr
</td>
<td>size of optional DbgHdr info appended to the end of the stream
</td></tr>
<tr>
<td>52
</td>
<td>4
</td>
<td>cbECInfo
</td>
<td>number of bytes in EC substream, or 0 if no EC enabled Mods
</td></tr>
<tr>
<td>56
</td>
<td>2
</td>
<td>flags
</td>
<td><div class="mw-highlight mw-highlight-lang-c mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">_flags</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">fIncLink</span><span class="o">:</span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// true if linked incrmentally (really just if ilink thunks are present)</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">fStripped</span><span class="o">:</span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// true if PDB::CopyTo stripped the private data out</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">fCTypes</span><span class="o">:</span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// true if this PDB is using CTypes.</span>
<span class="w"> </span><span class="n">USHORT</span><span class="w"> </span><span class="n">unused</span><span class="o">:</span><span class="mi">13</span><span class="p">;</span><span class="w"> </span><span class="c1">// reserved, must be 0.</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span>
</pre></div>
</td></tr>
<tr>
<td>58
</td>
<td>2
</td>
<td>wMachine
</td>
<td>Machine identifier, same as used in COFF object format, <i>e.g.,</i> hex 8664 for Intel x86 64-bit
</td></tr>
<tr>
<td>60
</td>
<td>4
</td>
<td>RESERVED
</td>
<td>future expansion, pad to 64 bytes
</td></tr></tbody></table>
<ul><li>Module information, variable length. Total size in above header. There is one of these for each object module used by the linker
<ul><li>Opened, 4 bytes.</li>
<li>Symbol info.
<ul><li>Section number, 2 bytes + 2 bytes padding.</li>
<li>Offset and size, 4 bytes each.</li>
<li>Flags, 4 bytes.</li>
<li>Module number, 2 bytes + 2 bytes padding.</li>
<li>CRCs for section data and relocations data, 4 bytes each.</li></ul></li>
<li>Flags, 2 bytes.</li>
<li>Stream number, 2 bytes.</li>
<li>Symbols size, 4 bytes.</li>
<li>Old and new line number info sizes, 4 bytes each.</li>
<li>Number of source files, 2 bytes + 2 bytes padding.</li>
<li>Offsets, 4 bytes.</li>
<li>niSource and niCompiler, 4 bytes each.</li>
<li>Module name, null terminated byte string.</li>
<li>Object name, null terminated byte string.</li>
<li>Padding to multiple of 4 bytes.</li></ul></li>
<li>Section contributions, section headers, file info, ts map, and EC info. Their sizes are found in the above header.</li>
<li>Debug header,
<ul><li>Stream numbers for Old Frame Pointer Omission, Exceptions, Fixups, Object Maps to and from Source, Section Headers, Token Ring IDs, Xdata, Pdata, New Frame Pointer Omission, and Section Header Origin. 2 bytes each.</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Debug_symbol" title="Debug symbol">Debug symbol</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li>The PDB format is documented here <a rel="nofollow" class="external text" href="https://github.com/Microsoft/microsoft-pdb">Information from Microsoft about the PDB format.</a></li>
<li><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/t6tay6cz.aspx">Microsoft MSDN documentation on DIA</a></li>
<li><a rel="nofollow" class="external text" href="http://www.codeproject.com/KB/bugs/PdbParser.aspx">How To Inspect the Content of a Program Database (PDB) File</a></li>
<li><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/ff558825(v=vs.85).aspx">Symbols and Symbol Files, MSDN</a></li>
<li><a rel="nofollow" class="external text" href="https://blogs.msdn.microsoft.com/vcblog/2016/02/08/whats-inside-a-pdb-file/">What’s inside a PDB File? / Visual C++ Team Blog</a></li>
<li><a rel="nofollow" class="external text" href="https://llvm.org/docs/PDB/index.html">PDB structure according to LLVM</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2023-10-13" href="https://en.wikipedia.org/wiki/?title=Program_database&amp;oldid=1179938253">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>